Fleetrun
Hecterra
NimBus
Otras aplicaciones
Wialon para Android/iOS
Logistics
Wialon Local
Wialon Hosting
WiaTag
Configurator
LeaseControl
es
Contenido
Sensores: lógica y alternativas de validación
  • technical_consulting
  • sensors
  • validation

Una de las primeras y principales etapas del trabajo con Wialon es la configuración de sensores en la unidad. En este artículo se examinará en detalle la validación de sensores, ya que tiene opciones de uso no obvias y permite realizar acciones únicas con los sensores.

Principio general de funcionamiento de los sensores

Wialon soporta muchos tipos de rastreadores (la cantidad actual se puede encontrar en el sitio web wialon.com en la sección Hardware), y cada uno de ellos "habla" en su propio "idioma". Por lo tanto, los parámetros que provienen de diferentes rastreadores y se muestran en la pestaña Mensajes pueden contener la misma información (por ejemplo, sobre temperatura o kilometraje), pero tener diferentes nombres. Para que el usuario no note diferencias al usar unidades con diferentes tipos de rastreadores, es necesario crear sensores para cada unidad en Wialon. Los sensores tienen un tipo determinado, lo que permite al sistema entender qué algoritmo se debe usar para procesar los parámetros entrantes.

Sin embargo, a menudo simplemente elegir el tipo de sensor e indicar un parámetro en él no es suficiente. Existen 3 métodos para convertir el valor del parámetro a la forma deseada:

  1. Expresión en la línea Parámetro;
  2. Tabla de cálculo;
  3. Validación.

Se pueden usar por separado o combinar. Si se usan varios métodos simultáneamente, se aplicarán en el orden en que se enumeran arriba.

En algunos casos, se puede lograr el mismo resultado con diferentes métodos. Por ejemplo, sumar los valores de dos sensores se puede hacer tanto con una expresión en la línea Parámetro como con validación. Más adelante se examinarán casos similares en detalle.

Cuándo se usa la validación

La validación se usa en casos donde es necesario vincular el valor de un sensor con otro. Desde el punto de vista de la aplicación práctica, se pueden destacar los siguientes casos para el uso de validación:

  • Un sensor afecta a otro a nivel físico (por ejemplo, el sensor del nivel de combustible muestra un valor incorrecto cuando hay un salto en las lecturas del sensor de voltaje);

  • Es necesario vincular varios sensores en un esquema lógico (por ejemplo, es necesario crear un sensor de apertura de las puertas delanteras del automóvil, que se activará cuando se active el sensor de apertura de la puerta izquierda o el sensor de apertura de la puerta derecha);

  • Es necesario mostrar un informe para un intervalo de tiempo en cuyo inicio se usaba un sensor antiguo con un parámetro, y al final, un nuevo sensor con otro parámetro (por ejemplo, anteriormente en el camión se usaba un sensor del nivel de combustible (SNC) menos preciso con una tabla de calibración, y luego se reemplazó por un SNC más preciso con otra tabla de calibración);

  • Hay varios sensores que miden el mismo indicador y es necesario mostrar el valor de uno u otro sensor (por ejemplo, el vehículo tenía un SNC incorporado menos preciso, se instaló un SNC más preciso adicional, y generalmente se usan las lecturas del segundo, pero si ocurre un error en ellas, es mejor mostrar el valor del primer sensor, aunque sea meno preciso);

  • El parámetro contiene información sobre diferentes sistemas de la unidad, y es necesario extraer solo una parte específica (por ejemplo, los primeros 5 bits del parámetro informan sobre el voltaje, y los siguientes tienen otro propósito, y del parámetro es necesario extraer solo los bits relacionados con el voltaje);

  • Es necesario realizar algunos cálculos aritméticos que incluyen valores de varios sensores (por ejemplo, se requiere ver en tiempo real el consumo de combustible en km/l, que se calcula dividiendo la lectura del odómetro relativo por las lecturas del sensor del consumo de combustible instantáneo).

Tipos de validación

En Wialon existen 12 tipos de validación. No verá tal división en la interfaz del sistema de rastreo satelital, pero para simplificar, todos los tipos se pueden dividir condicionalmente en 3 grupos.

GrupoTipos de validaciónComentarioAlternativas
Aritmético
  • Sumar
  • Restar validador del sensor
  • Restar sensor del validador
  • Multiplicar
  • Dividir el sensor por el validador
  • Dividir el validador por el sensor

Se puede prescindir fácilmente de estos tipos.

Existen y son simples.

Algorítmico
  • Comprobar no nulos
  • Reemplazar sensor por validador en caso de error

Ambos tipos se usan con frecuencia.

Para el segundo tipo hay una alternativa simple.

Lógico
  • Y lógico
  • O lógico
  • Operación Y
  • Operación O

Los tipos menos comprensibles, de los cuales principalmente se usan solo los dos primeros.

Existen, pero no son simples.

Examinemos cada grupo con más detalle.

Validación aritmética

Este grupo incluye operaciones aritméticas simples: suma, resta, multiplicación y división.

Se puede prescindir fácilmente de estos tipos de validación, ya que se puede lograr un resultado similar usando una expresión en la línea Parámetro. Para referirse al valor de otro sensor en la expresión, es necesario indicar el nombre de ese sensor entre corchetes (por ejemplo, [Fuel Level]).

En el siguiente ejemplo se examina una pequeña diferencia entre estos enfoques.

 Ejemplo

Supongamos que de la unidad llegan mensajes que contienen los siguientes parámetros:

  • odometer — muestra la distancia en kilómetros recorrida entre los dos últimos mensajes;
  • fuel_consumption — muestra el combustible en litros consumido entre los dos últimos mensajes.

El cliente necesita un sensor que muestre en tiempo real el consumo en km/l.

Variante de solución mediante validación:

  1. Crear un Sensor del consumo de combustible instantáneo con el nombre SCCI, basado en el parámetro fuel_consumption.

  2. Crear un Sensor personalizado con el nombre Consumo y unidades de medida km/l. Como parámetro, indicar odometer. En las propiedades del sensor Consumo, indicar el sensor SCCI como validador y seleccionar el tipo de validación Dividir el sensor por el validador.

Variante de solución mediante expresión:

  1. Crear un sensor de tipo Odómetro relativo con el nombre Kilometraje relativo, basado en el parámetro odometer.

  2. Crear un Sensor del consumo de combustible instantáneo con el nombre SCCI, basado en el parámetro fuel_consumption.
  3. Crear un Sensor personalizado con el nombre Consumo y unidades de medida km/l. Usar una fórmula con los nombres de los sensores creados anteriormente entre corchetes: [Kilometraje relativo]/[SCCI].

Como se puede notar fácilmente, al usar validación es suficiente crear no 3, sino solo 2 sensores, pero en este caso ningún sensor mostrará el valor del kilometraje entre mensajes. Sin embargo, si para resolver otras tareas necesita crear un sensor de tipo Odómetro relativo, entonces en ese caso la solución usando una expresión será más conveniente.

Validación algorítmica

Este grupo incluye solo 2 tipos de validación, cada uno de los cuales merece consideración.

Comprobar no nulos

Este tipo de validación es uno de los más utilizados. Permite ignorar las lecturas erróneas del sensor validado, cuya presencia se determina por el valor cero del sensor validador.

La situación más común de aplicación es la siguiente: un sensor conectado al rastreador puede mostrar datos incorrectos cuando el voltaje es insuficiente.

 Ejemplo

Supongamos que en la unidad se han creado los siguientes sensores:

  • Sensor del nivel de combustible con el nombre SNC, basado en el parámetro fuel_lvl;
  • Sensor de voltaje con el nombre Voltaje, basado en el parámetro pwr_ext.

Cuando el valor del sensor de voltaje cae por debajo de 9 voltios, el sensor analógico de nivel de combustible muestra valores erróneos. Para un control correcto del combustible, es necesario eliminar las lecturas falsas.

En este caso es necesario:

  1. Crear un Sensor digital personalizado con el nombre Voltaje suficiente basado en la expresión [Voltaje].

  2. Agregar una tabla de cálculo con las siguientes filas:
    X=0; a=0; b=0
    X=9; a=0; b=1

  3. En las propiedades del SNC, indicar el sensor Voltaje suficiente como validador y seleccionar el tipo de validación Comprobar no nulos.

Ahora, cuando el voltaje esté por debajo de 9 voltios, el sensor Voltaje suficiente tendrá un valor de 0 (Apagado), por lo tanto, no pasará la verificación de comprobar no nulos, debido a lo cual las lecturas del SNC se reemplazarán por un guion (N/A). Esto permitirá excluir datos erróneos del análisis.

El uso de la validación Comprobar no nulos es posible no solo en situaciones donde los sensores están relacionados entre sí a nivel físico (en el ejemplo anterior, el funcionamiento del sensor se ve afectado por un voltaje insuficiente), sino también en casos donde se observa una correlación entre los valores de los sensores. Por ejemplo, si nota que por alguna razón el SNC muestra valores falsos cuando el sensor de temperatura muestra un valor de 255, esto es suficiente para usar este tipo de validación.

Reemplazar sensor por validador en caso de error

Este tipo de validación también es bastante popular. La lógica de su funcionamiento es simple: si el sensor validado tiene un valor erróneo, se reemplaza por el valor del sensor validador.

Este es el único tipo de validación que puede reaccionar a valores erróneos del sensor que se muestran como un guion o N/A. Todos los demás tipos de validación, si hay un error en la entrada, mostrarán un error en la salida.

Este tipo es adecuado para situaciones en las que es necesario mostrar el valor de dos sensores como si fuera un solo sensor. Generalmente, puede haber dos razones para esto: o bien se reemplazó un sensor antiguo por uno nuevo, y los informes deben contener información tanto del intervalo de funcionamiento del sensor antiguo como del nuevo, o bien la unidad tiene simultáneamente dos sensores, pero uno de ellos muestra periódicamente un error, y en ese momento es necesario mostrar el valor del otro sensor. Consideremos ambos casos con ejemplos.

 Ejemplo 1

Supongamos que dentro del intervalo del informe, de la unidad llegaban mensajes que contenían los siguientes parámetros:

  • adc1 — muestra el nivel de combustible en voltios según el sensor del nivel de combustible instalado anteriormente (en los nuevos mensajes el parámetro está ausente);
  • param4 — muestra el nivel de combustible en voltios según el nuevo sensor del nivel de combustible (en los mensajes antiguos el parámetro está ausente).

Es necesario configurar los sensores de manera que en el informe se puedan mostrar datos sobre el combustible tanto del sensor antiguo como del nuevo.

En este caso es necesario:

  1. Crear un sensor del nivel de combustible con el nombre SNC (antiguo), basado en el parámetro adc1. En su tabla de cálculo del SNC (antiguo) es necesario introducir la antigua tabla de calibración para convertir voltio a litros.

  2. Crear un sensor del nivel de combustible con el nombre SNC, basado en el parámetro param4. En su tabla de cálculo es necesario introducir la nueva tabla de calibración para convertir voltios a litros. En las propiedades del SNC, indicar el sensor SNC (antiguo) como validador y seleccionar el tipo de validación Reemplazar sensor por validador en caso de error.

Esta tarea se puede resolver usando una expresión en la línea Parámetro, específicamente usando la operación Comprobación de disponibilidad del valor. Para esto es necesario:

  1. Crear un sensor del nivel de combustible con el nombre SNC (antiguo), basado en el parámetro adc1. En su tabla de cálculo es necesario introducir la antigua tabla de calibración para convertir voltios a litros.
  2. Crear un sensor del nivel de combustible con el nombre SNC, basado en el parámetro param4|[SNC (antiguo)]. En su tabla de cálculo es necesario introducir la nueva tabla de calibración para convertir voltios a litros.
 Ejemplo 2

Supongamos que de la unidad llegan mensajes que contienen los siguientes parámetros:

  • fls_rs485 — muestra el nivel de combustible en voltios según el sensor del nivel de combustible instalado;
  • fuel_lvl — muestra el nivel de combustible en litros según el sensor del nivel de combustible incorporado por el fabricante.

El SNC instalado es más preciso, pero a veces muestra un error, y en ese momento el cliente quiere ver las lecturas del SNC incorporado por el fabricante.

En este caso es necesario:

  1. Crear un Sensor personalizado con el nombre SNC incorporado, basado en el parámetro fuel_lvl.

  2. Crear un sensor del nivel de combustible con el nombre SNC, basado en el parámetro fls_rs485. En su tabla de cálculo es necesario introducir la tabla de calibración para convertir voltios a litros. En las propiedades del SNC, indicar el sensor SNC incorporado como validador y seleccionar el tipo de validación Reemplazar sensor por validador en caso de error.

Validación lógica

Este grupo incluye 4 tipos de validación:

  • Y lógico y O lógico — trabajan con valores lógicos (en Wialon se llaman digitales y son Encendido/Apagado o 1/0);
  • Operación Y y Operación O — trabajan por separado con cada bit de los números.

Consideremos estas variantes con ejemplos.

Y lógico / O lógico

Se puede decir que la operación Y lógico da un valor de 1 como resultado solo cuando ambos valores de entrada son 1, y O lógico — si al menos uno de los valores de entrada es 1.

Si suponemos que dos sensores están vinculados por validación, y uno de ellos se basa en el parámetro a, y el otro en el parámetro b, todos los posibles resultados se pueden describir en una tabla:

Tabla de verdad
aba Y ba O b

0

000
0101

1

001

1

111

El valor del sensor validado después de realizar las operaciones lógicas Y/O siempre será 0 o 1 (en este caso no se considera el error, es decir, un guion o N/A).

En la entrada también se esperan solo valores 0 o 1, sin embargo, en Wialon es posible una situación en la que se ingresen otros valores numéricos a la entrada de la validación. En tal caso, el sistema funcionará de la siguiente manera:

  • Solo 0 se percibe como 0 (Apagado).
  • Cualquier otro valor numérico (por ejemplo, 0.01, -0.01, 100500, -777, etc.) se percibirá como 1 (Encendido).

Idealmente, se deben evitar tales situaciones y usar una tabla de cálculo para convertir todos los valores entrantes solo en 0 o 1.

 Ejemplo 1

Supongamos que de la unidad llegan mensajes que contienen los siguientes parámetros:

  • in3 — igual a 0 cuando el equipo auxiliar está apagado, o 1 cuando está encendido;
  • in4 — igual a 0 cuando la puerta trasera está cerrada, o 1 cuando está abierta.

Es necesario crear un sensor que se active cuando el equipo auxiliar esté encendido y la puerta trasera esté abierta.

En este caso es necesario:

  1. Crear un Sensor digital personalizado con el nombre Equipo auxiliar, basado en el parámetro in3.

  2. Crear un Sensor digital personalizado con el nombre Puerta trasera abierta con equipo en funcionamiento, basado en el parámetro in4. Luego seleccionar el sensor Equipo auxiliar como validador y elegir el tipo de validación Y lógico.

Esta tarea también se puede resolver usando una expresión en la línea Parámetro. Para esto, es suficiente crear un Sensor digital personalizado con el nombre Puerta trasera abierta con equipo en funcionamiento, basado en la expresión in3*in4.

Este enfoque funcionará si los parámetros solo pueden tomar valores de 0 o 1.

 Ejemplo 2

Supongamos que de la unidad llegan mensajes que contienen los siguientes parámetros:

  • door11 — igual a 0 cuando la puerta delantera izquierda está cerrada, o 1 cuando esta puerta está abierta;
  • door12 — igual a 0 cuando la puerta delantera derecha está cerrada, o 1 cuando esta puerta está abierta.

Es necesario crear un sensor que se active cuando al menos una de las puertas delanteras del automóvil esté abierta.

En este caso es necesario:

  1. Crear un Sensor digital personalizado con el nombre Puerta delantera izquierda abierta, basado en el parámetro door11.

  2. Crear un Sensor digital personalizado con el nombre Apertura de puertas delanteras, basado en el parámetro door12. Luego indicar el sensor Puerta delantera izquierda abierta como validador y seleccionar el tipo de validación O lógico.

Esta tarea también se puede resolver usando una expresión en la línea Parámetro y una tabla de cálculo:

  1. Crear un Sensor digital personalizado con el nombre Apertura de puertas delanteras, basado en la expresión door11+door12.
  2. Agregar una tabla de cálculo con las siguientes filas: 
    X=0; a=0; b=0
    X=1; a=0; b=1

Este enfoque funcionará si los parámetros solo pueden tomar valores de 0 o 1.

Operación Y

Esta validación es útil para extraer una parte específica de bits de un parámetro. Implica la ejecución bit a bit de la Operación Y, como se demuestra a continuación.

Primero, usando la aplicación Calculadora en modo programador o herramientas en línea similares, es necesario convertir el número en cuestión del sistema decimal (DEC) al sistema binario (BIN).

Por ejemplo, el resultado de la Operación Y entre los números 122 y 15 tendrá el siguiente aspecto:


DECBIN
número 112201111010
número  21500001111

resultado de la Operación Y

1000001010

Si en el segundo número el bit es 0 (resaltado en rojo), entonces en el resultado este bit también será 0. Y si en el segundo número el bit es 1 (resaltado en verde), entonces en el resultado este bit tendrá el mismo valor que en el primer número. Se puede decir que usando la representación binaria del número 15 se realizó un filtrado del número 122 de tal manera que solo quedaron los 4 bits menos significativos.

 Ejemplo 1

Supongamos que de la unidad llegan mensajes que contienen un parámetro de 16 bits can_a1, que contiene información sobre diferentes sistemas de la unidad. Según la documentación del rastreador, en los 8 bits menos significativos del parámetro se encuentra la información sobre el nivel de combustible. Es necesario verificar esto y extraer la parte del parámetro de los 8 bits menos significativos para crear un sensor del nivel de combustible basado en ellos.

Por ejemplo, cuando un tanque de 100 litros está lleno al 40%, el valor del parámetro can_a1 puede tener los siguientes valores:

DECBIN
169980100001001100110
267260110100001100110
408061001111101100110
390141001100001100110

Como se puede notar fácilmente, el valor del parámetro can_a1 puede cambiar en la representación decimal, pero los 8 bits menos significativos del parámetro permanecen sin cambios (están resaltados en azul), ya que la cantidad de combustible en el tanque no cambia. Si convertimos los valores de los 8 bits menos significativos al sistema decimal, obtenemos:

(BIN) 0110 0110 = (DEC) 102

Y el valor máximo que se puede almacenar en 8 bits es:

(BIN) 1111 1111 = (DEC) 255

Usando operaciones aritméticas simples, verificamos que 102/255 = 40/100 = 0.4. De esto se puede concluir que los 8 bits menos significativos del parámetro realmente corresponden a un tanque lleno al 40%.

Para extraer la primera parte del parámetro es necesario:

  1. Crear un Sensor personalizado con el nombre 8 bits menos significativos basado en el parámetro const255.

  2. Crear un sensor del nivel de combustible con el nombre SNC basado en el parámetro can_a1. Luego seleccionar el sensor 8 bits menos significativos como validador y elegir el tipo de validación Operación Y. También es necesario introducir en la tabla de cálculo del sensor una tabla de calibración para convertir el resultado a litros.

Como en diferentes mensajes cada bit puede tener diferentes valores, designaremos los bits menos significativos como b y los más significativos como B:


DECBIN
can_a1
BBBBBBBBbbbbbbbb
número 22550000000011111111
resultado de la Operación Y
00000000bbbbbbbb

Como resultado, usando la representación binaria del número 255 se realizó un filtrado del parámetro can_a1 de tal manera que solo quedaron los 8 bits menos significativos.

Esta tarea se puede resolver usando una expresión en la línea Parámetro.

Para esto es necesario crear un sensor del nivel de combustible con el nombre SNC, basado en la siguiente expresión:

const128*can_a1:8+const64*can_a1:7+const32*can_a1:6+const16*can_a1:5+const8*can_a1:4+
const4*can_a1:3+const2*can_a1:2+const1*can_a1:1

Se puede obtener más información sobre esta solución en el artículo sobre trabajo con bits.

 Ejemplo 2

Supongamos que de la unidad llegan mensajes que contienen un parámetro de 16 bits can_b2, que contiene información sobre diferentes sistemas de la unidad. Según la documentación del rastreador, en los 8 bits más significativos del parámetro se encuentra la información sobre el nivel de combustible. Es necesario verificar esto y extraer la parte del parámetro de los 8 bits más significativos para crear un sensor del nivel de combustible basado en ellos.

Por ejemplo, cuando un tanque de 200 litros está lleno al 60%, el valor del parámetro can_b2 puede tener los siguientes valores:

DECBIN
392821001100101110010
392621001100101011110
393621001100111000010
392861001100101110110

Como se puede notar fácilmente, el valor del parámetro can_b2 puede cambiar en la representación decimal, pero los 8 bits más significativos del parámetro permanecen sin cambios (están resaltados en azul), ya que la cantidad de combustible en el tanque no cambia. Si convertimos los valores de los 8 bits más significativos al sistema decimal, obtenemos:

(BIN) 1001 1001 = (DEC) 153

Y el valor máximo que se puede almacenar en 8 bits es:

(BIN) 1111 1111 = (DEC) 255

Usando operaciones aritméticas simples, verificamos que 153/255 = 120/200 = 0.6. De esto se puede concluir que los 8 bits más significativos del parámetro realmente corresponden a un tanque lleno al 60%.

Para extraer la segunda parte del parámetro es necesario:

  1. Crear un Sensor personalizado con el nombre 8 bits más significativos basado en el parámetro const65280.

  2. Crear un Sensor personalizado con el nombre Bits filtrados basado en el parámetro can_b2. Luego seleccionar el sensor 8 bits más significativos como validador y elegir el tipo de validación Operación Y.

  3. Crear un sensor del nivel de combustible con el nombre SNC basado en la expresión [Bits filtrados]/const256. En su tabla de cálculo es necesario introducir una tabla de calibración para convertir el resultado a litros.

Como en diferentes mensajes cada bit puede tener diferentes valores, designaremos los bits menos significativos como b y los más significativos como B:


DECBIN
can_b2
BBBBBBBBbbbbbbbb
número 2652801111111100000000
resultado de la Operación Y
BBBBBBBB00000000
resultado después de dividir por 256
00000000BBBBBBBB

El desplazamiento de bits varios lugares hacia abajo se realiza dividiendo por 2 elevado a la potencia igual al número de lugares a desplazar. En este caso, es un desplazamiento de 8 lugares, por lo que la división se realiza por 28 = 256.

Como resultado, usando la representación binaria del número 65280 se realizó un filtrado del parámetro can_b2 de tal manera que solo quedaron los 8 bits más significativos, y luego se convirtieron en bits menos significativos mediante el desplazamiento.

Esta tarea se puede resolver usando una expresión en la línea Parámetro.

Para esto es necesario crear un sensor del nivel de combustible con el nombre SNC, basado en la siguiente expresión:

const128*can_b2:16+const64*can_b2:15+const32*can_b2:14+const16*can_b2:13+const8*can_b2:12+
const4*can_b2:11+const2*can_b2:10+const1*can_b2:9

Se puede obtener más información sobre esta solución en el artículo sobre trabajo con bits.

Operación O

Esta validación implica la ejecución bit a bit de la Operación O, como se demuestra a continuación.

Primero, usando la aplicación Calculadora en modo programador o herramientas en línea similares, es necesario convertir el número en cuestión del sistema decimal (DEC) al sistema binario (BIN).

Por ejemplo, el resultado de la Operación O entre los números 122 y 210 tendrá el siguiente aspecto:


DECBIN
número 112201111010
número 221011010010
resultado de la Operación O25011111010

Si al menos uno de los bits en los dos primeros números es 1, entonces en el resultado este bit será 1 (resaltado en verde). Y si ambos bits en los dos primeros números son 0, entonces en el resultado este bit será 0 (resaltado en rojo).

Oleg Zharkovsky,Customer Service Engineer

Si encuentra un error en el texto, por favor, selecciónelo y apriete Ctrl+Intro.
Gracias por su opinión.
Informar de un error
Texto con el error Comentario
Máximo 500 caracteres